A variety of internet-based server applications require access to certain data. In situations where multiple servers are executing multiple instances of a particular server application, all instances of the server application require access to the same set of data. For example, a commerce-related server application requires access to a set of data containing information regarding product (or service) prices, shipping charges, and promotions or other discounts. If multiple servers are executing the same commerce-related server application, each instance of the application must access the same set of data to accurately and consistently calculate the price of a customer's order. If different instances of the commerce-related server application access different sets of data, different instances of the application may calculate different prices for the same order. To avoid this problem, it is important that all instances of a particular application access the same set of data or access different sets of synchronized data.
In a typical collection of web servers, referred to as a “web farm”, a technique known as “DNS round-robin load balancing” is often used to distribute tasks among the multiple web servers. Using this technique, each web server in the web farm is assigned a unique internet protocol (IP) address. In this situation, a single internet site address is associated with a list of IP addresses (i.e., the unique IP addresses assigned to each web server in the web farm). When a client browser resolves an internet site address using a domain name service (DNS) lookup, the client browser receives the list of IP addresses associated with all web servers in the web farm. In response to the first request, the client browser selects one entry in the list as the starting point. The client browser then rotates through the list of addresses in a round-robin manner for each subsequent request. When the browser reaches the end of the list, the next request is retrieved from the beginning of the list. Thus, each time a web page associated with an instance of an internet-based application is accessed, the next web server in the web farm (i.e., the web server associated with the next IP address in the list of addresses) is used to provide the web page to the browser.
In the internet server application discussed above, all web servers in the web farm must access the same set of data regarding pricing, shipping, and discounts. If different web servers apply different sets of data, then the price of the customer's order may change with each new web page access. For example, a simple “web page refresh” command will cause the browser to retrieve the “refreshed” web page from the web server associated with the next IP address in the list. If the new web server applies a different set of data to determine pricing, shipping costs, and discounts, then the price displayed to the customer may change after the page is refreshed, even though the actual order has not changed. This situation is undesirable and may cause the customer to abandon the web site, thereby resulting in lost revenue (and possibly a lost customer) for the operator of the site.
To ensure that all web servers access the same set of data, some existing systems use a two-tier approach of the type shown in FIG. 1, which allows multiple web servers to access data stored in a database through a cache server. FIG. 1 shows a web farm 10 comprised of multiple web servers 12. Each web server 12 is connected to a cache server 14, which is connected to a database 16. Web servers 12 are connected to cache server 14 through a local area network (LAN) 18. To access a particular set of data, one of the web servers 12 issues a data request across LAN 18 to cache server 14. Cache server 14 then retrieves the requested data from database 16 and provides the retrieved data across LAN 18 to the requesting web server 12. By providing a common database, each web server 12 accesses the same set of data when generating a web page.
Although the system of FIG. 1 ensures that each web server accesses a common set of data, the use of a single cache server 14 introduces a single point of failure. If cache server 14 fails, then all web servers 12 are prevented from accessing data contained in database 16. Furthermore, the system shown in FIG. 1 creates a significant amount of network traffic on LAN 18. Each time a web server 12 requests data from database 16, several messages (as well as the requested data) are sent across LAN 18 to satisfy the request. If the data requested by the web servers 12 does not change frequently, the web servers 12 may request the same data numerous times before the data in database 16 changes. This repeated transmission of data requests for the same data generates significant network traffic that is unnecessary if the data has not changed since the last data request. Additionally, if network traffic is heavy, the time required to retrieve data across LAN 18 may significantly delay the generation of a web page by web server 12. If data retrieval speed is important, then the delays associated with the system of FIG. 1 may prevent acceptable operation of web server 12.